GPAI 使用指南
1. 模块介绍
1.1. 术语定义
术语 | 定义 | 注释说明 |
---|---|---|
ADC | Analog Digital Converter | 模拟数字转换器 |
ADCIM | ADC Interface Management | 模数转换管理模块 |
GPAI | General Purpose Analog Input Interface | 通用模拟输入接口 |
1.2. 模块简介
GPAI需要依赖ADCIM模块(统一管理硬件通路和处理信号校准等),其关系如图:
图 7.16 GPAI相关模块的硬件框图
GPAI主要功能是将外部的模拟信号转成数字信号,然后上报给CPU。支持的特性有:
- 最多支持 8 路模拟信号的输入
- 支持周期采样(周期间隔用户可定制)和非周期采样两种模式
- 每次采样的样本数量(1~8)可定制
- 支持高电平、低电平报警设置
2. 参数配置
2.1. 内核配置
2.1.1. 配置 IIO
在 luban 根目录下执行 make menuconfig,进入配置,按如下选择:
ArtInChip Luban SDK Configuration
Linux kernel
Advance setting
Linux Kernel Tools
<*>iio
2.1.2. 配置 GPAI
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,按如下选择:
Linux
Device Drivers
<*> Industrial I/O support
Analog to digital converters
<*> Artinchip GPAI driver
2.2. DTS 参数配置
2.2.1. GPAI 自定义参数
GPAI 驱动支持从DTS中配置的自定义参数,如下表:
参数名称 | 类型 | 取值范围 | 功能说明 |
---|---|---|---|
aic,sample-period-ms | 正整数 | > 0, (0, 10000] | 周期采样模式下的周期值,单位:ms |
aic,high-level-thd | 正整数 | > 0 | 高电平报警阈值 |
aic,low-level-thd | 正整数 | > 0 | 低电平报警阈值 |
小技巧
上表中的采样周期范围值是GPAI V1.0的。GPAI V0.1的周期有效范围不到3ms,不推荐 。
2.2.2. D211 配置
在common/d211.dtsi中的GPAI控制器定义:
gpai: gpai@19251000 {
compatible = "artinchip,aic-gpai-v1.0";
reg = <0x0 0x19251000 0x0 0x1000>;
interrupts-extended = <&plic0 92 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_GPAI>, <&cmu CLK_APB1>;
clock-names = "gpai", "pclk";
resets = <&rst RESET_GPAI>;
};
2.2.3. Board 配置
xxx/board.dts中的参数配置需要区分通道号,每个通道可以单独使能。使能的通道,需要指定该通道用到的GPIO配置,如下面的 gpai7_pins
:
&gpai {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&gpai7_pins>;
gpai0 {
aic,sample-period-ms = <10>;
aic,high-level-thd = <1830>;
aic,low-level-thd = <1800>;
status = "disabled";
};
gpai1 {
status = "disabled";
};
gpai2 {
status = "disabled";
};
gpai3 {
status = "disabled";
};
gpai4 {
status = "disabled";
};
gpai5 {
status = "disabled";
};
gpai6 {
status = "disabled";
};
gpai7 {
status = "okay";
};
};
3. 调试指南
3.1. 调试开关
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,可以打开GPAI模块的DEBUG选项:
Linux
Kernel hacking
Artinchip Debug
[*] GPAI driver debug
此DEBUG选项打开的影响:
- GPAI 驱动以-O0编译
- GPAI 的pr_dbg()和dev_dbg()调试信息会被编译
在系统运行时,如果要打印pr_dbg()和dev_dbg()信息,还需要调整loglevel为8,两个方法:
- 在board.dts中修改bootargs,增加“loglevel=8”
- 在板子启动到Linux shell后,执行命令:
echo 8 > /proc/sys/kernel/printk
3.2. Sysfs 节点
IIO子系统会为ADC设备创建一组标准的Sysfs节点文件,可用于读取ADC的数值。
# cd /sys/devices/platform/soc/19251000.gpai/iio:device0
/sys/devices/platform/soc/19251000.gpai/iio:device0 # ls
dev in_voltage3_raw in_voltage7_raw subsystem
in_voltage0_raw in_voltage4_raw in_voltage_scale uevent
in_voltage1_raw in_voltage5_raw name
in_voltage2_raw in_voltage6_raw of_node
# cat in_voltage7_raw
# 4095